import Vue from 'vue';
import Vuex from 'vuex';
import usermodel from '../api/user.js'
import {Message} from 'element-ui'
import { setToken, getToken, setUserInfo, getUserInfo ,removeTokenAndInfo } from '../utils/auth.js'
import router from '../router/index'
Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    dialogFormVisible: false,
    token: getToken() ? getToken() : '',
    userInfo: getUserInfo() ? getUserInfo() : ''
  },
  mutations: {
    // 存token
    settoken(state, token) {
      state.token = token
      setToken(token)
    },
    // 存用户信息
    setUserInfo(state, data) {
      state.userInfo = data
      setUserInfo(data)
    },
    // 清空token和用户信息
    clearTokenAndInfo(state) {
      state.token = ""
      state.userInfo = []
    }
  },
  getters: {
    // 用户信息
    getUserInfo(state) {
      return state.userInfo
    },
    getToken(state) {
      return state.token
    }
  },
  actions: {
    // 登录方法
    handleUserLogin({commit}, payload){
      return new Promise(async(resolve, reject) => {
        try{
          // 调用登录接口
          const result = await usermodel.getUserLogin(payload)
          // 获取token
          const {token} = result.data
          // 调用mutions的方法把token存起来
          commit('settoken', token)
          // 把登录成功的数据返回出去
          resolve(result)
        }catch(err){
          // 错误时候将错误返回出去
          reject(err)
        }
      })
    },
    // 获取用户信息方法
    handleUserInfo({commit}){
      return new Promise(async(resolve, reject) => {
        try{
          // 获取用户信息接口
          const result = await usermodel.getUserInfo()
          console.log(result);
          // 把用户信息存起来
          const {msg} = result
          commit('setUserInfo', msg)
          resolve(result)
        }catch(err){
          // 错误时候将错误返回出去
          reject(err)
        }
      })
    },
    // 退出登录方法
    async handleLogout({commit}){
      try{
        const result = await usermodel.userLogut()
        if(result.error_code == 0) {
          removeTokenAndInfo()
          commit('clearTokenAndInfo')
          router.push('/login')
        }else {
          Message('退出登录失败')
        }
      }catch(err){
        console.log(err);
      }
    }
  },
  modules: {
  },
});
